package com.battery.system.mapper;

import java.util.Date;
import java.util.List;
import java.util.Map;

import com.alibaba.fastjson.JSONObject;
import com.battery.system.base.BaseMapper;
import com.battery.system.domain.ActivityCount;
import com.battery.system.domain.BO.DevOnOff;
import com.battery.system.domain.BO.DeviceBO;
import com.battery.system.domain.BO.NotIssued;
import com.battery.system.domain.Device;
import com.battery.system.domain.VO.*;
import org.apache.ibatis.annotations.Param;

/**
 * 设备Mapper接口
 *
 * @author battery
 * @date 2021-01-22
 */
public interface DeviceMapper extends BaseMapper<Device> {
    /**
     * 查询设备
     *
     * @param id 设备ID
     * @return 设备
     */
    public Device selectDeviceById(String id);

    /**
     * 查询设备列表
     *
     * @param device 设备
     * @return 设备集合
     */
    public List<Device> selectDeviceList(Device device);

    /**
     * 新增设备
     *
     * @param device 设备
     * @return 结果
     */
    public int insertDevice(Device device);

    /**
     * 修改设备
     *
     * @param device 设备
     * @return 结果
     */
    public int updateDevice(Device device);

    /**
     * 删除设备
     *
     * @param id 设备ID
     * @return 结果
     */
    public int deleteDeviceById(String id);

    /**
     * 批量删除设备
     *
     * @param ids 需要删除的数据ID
     * @return 结果
     */
    public int deleteDeviceByIds(String[] ids);

    /**
     * 查询仓库中的设备列表数据
     *
     * @param deviceBO
     * @return
     */
    List<DeviceVO> selectWarehouseList(@Param("deviceBO") DeviceBO deviceBO);

    /**
     * 根据机柜SN查找对应的设备信息
     *
     * @param sn
     * @return
     */
    Device selectBySn(String sn);

    /**
     * 设备列表
     *
     * @param deviceBO
     * @return
     */
    List<DeviceVO> selectDeviceVOList(@Param("deviceBO") DeviceBO deviceBO);

    Device selectPartnerBySn(String sn);

    List<Device> selectDeviceListByAccountId(@Param("id") String id);

    DeviceVV deleteDeviceVVById(@Param("devId") String devId);

    int updateDeviceByList(@Param("date") Date date, @Param("where") String where,
                           @Param("merchantId") String merchantId, @Param("storeId") String storeId);

    List<DevOnOff> selectByOnOff(@Param("where") String where);

    List<NotIssued> selectByNotIssued(@Param("id") String id, @Param("date") Integer date);

    List<NotIssued> selectByBubao(@Param("id") String id, @Param("num") int num);

    /**
     * @param storeId
     * @return
     */
    Integer getDevInStockNumByStoreId(String storeId);

    /**
     * 根据门店ID 获取对应的设备 电池数量信息
     *
     * @param storeId
     * @return
     */
    BatteryNumber getWsDevInStockNumByStoreId(String storeId);

    /**
     * 设备返回仓库操作
     *
     * @param deviceUpdate
     * @return
     */
    int returnWarehouse(Device deviceUpdate);

    List<ActivityCount> selectUsedByActivity(@Param("map") Map<String, String> map);

    void updateDeviceToParnter(@Param("dev") String[] dev, @Param("id") String id);

    /**
     * \【设备-调回功能块】--- 下级代理列表，展示下级代理闲置设备数量
     *
     * @param partnerId
     * @return
     */
    List<PartnerNoUseDevVO> selectLowerPartnerForNoUseDev(@Param("partnerId") String partnerId, @Param("partnerName") String partnerName);

    /**
     * 【设备-调回功能块】 ---下级代理的闲置设备，展示下级代理闲置设备
     *
     * @param lowerPartnerId
     * @param sn
     * @return
     */
    List<DevNoUseVO> selectNoUseDevsByLowerPartner(@Param("lowerPartnerId") String lowerPartnerId, @Param("sn") String sn);

    /**
     * @param where
     * @return
     */
    List<DevVO> onLineDevList(@Param("where") String where, @Param("orderBy") String orderBy);


    Integer onLineDevListCount(@Param("where") String where);


    List<DevInfoVO> devListByStoreId(@Param("where") String where);

    /**
     * @param deviceBO
     * @return
     */
    List<DeviceVO> listDevIncome(@Param("deviceBO") DeviceBO deviceBO);

    /**
     * 根据设备ID回收设备
     *
     * @param id
     * @return
     */
    int devRecoveryById(String id);

    /**
     * 总设备的统计分析
     *
     * @return
     */
    DevAnalysisVO selectDevAnalysis();

    /**
     * @param where
     * @param onOrderBy
     * @return
     */
    List<DevVO> onLineSpecialDevList(@Param("where") String where, @Param("orderBy") String onOrderBy);

    /**
     * 批量回收设备
     *
     * @param where
     * @return
     */
    int devBatchRecovery(@Param("where") String where);

    /**
     * 获取该门店下的可回收的设备
     *
     * @param storeId
     * @return
     */
    List<Device> getRecyclableDevList(String storeId);

    /**
     * 获取闲置设备（新接口，有分页）
     *
     * @param where
     * @return
     */
    List<Device> getAsideDevs(@Param("where") String where);

    /**
     * @param toStrArray
     * @return
     */
    int returnWarehousesByIds(String[] toStrArray);

    /**
     * 根据条件查询闲置设备数量
     *
     * @param where
     * @return
     */
    Integer asideDevCount(@Param("where") String where);
}
